// package main
// import (
// 	"fmt"
// 	"reflect"
// )
// //反射获取变量的类型的名字和种类
// //类型的种类挺有用
// func reflectFn(x interface{}){
// 	v:=reflect.TypeOf(x)
// 	fmt.Printf("val:%v name:%v kind:%v\n",v,v.Name(),v.Kind())
// }
// type myInt int
// type Person struct{
// 	Name string 
// 	Age int
// 	Gender string
// }
// func main(){
// 	a:=10
// 	b:=3.14
// 	c:="hello"
// 	d:=true
// 	person:=Person{
// 		Name:"yyy",
// 		Age:18,
// 		Gender:"male",
// 	}
// 	slice:=[]string{
// 		"hello",
// 		"world",
// 		"zhangsan",
// 	}
// 	var e myInt= 3
// 	map1:=make(map[string]int)
// 	reflectFn(a)
// 	reflectFn(b)
// 	reflectFn(c)
// 	reflectFn(d)
// 	reflectFn(person)
// 	reflectFn(e)
// 	reflectFn(slice)
// 	reflectFn(map1)
// }

// package main
// import (
// 	"fmt"
// 	"reflect"
// )
// func reflectValue(x interface{})int64{
// 	//x+=10
// 	//通过类型来实现断言
// 	// val,ok:=x.(int)
// 	// if ok!=false{
// 	// 	fmt.Printf("error err=%v\n",ok)
// 	// }
// 	// val+=10
// 	// return val
// 	//通过reflect.ValueOf来实现  获取变量底层的类型
// 	// val:=reflect.ValueOf(x)
// 	// var m=val.Int()+10
// 	// return m;
// }
// func main(){
// 	a:=10
// 	ret:=reflectValue(a)
// 	fmt.Println(ret)
// }

// package main
// import (
// 	"fmt"
// 	"reflect"
// )
// func reflectValue(x interface{}){
// 	v:=reflect.ValueOf(x)
// 	kind:=v.Kind()
// 	switch kind{
// 	case reflect.Int:
// 		fmt.Printf("原始值是%v\n",v.Int())
// 	case reflect.Float64:
// 		fmt.Printf("原始值是:%f\n",v.Float())
// 	case reflect.String:
// 		fmt.Printf("原始值是:%s\n",v.String())
// 	default:
// 		fmt.Printf("其他原始值\n")
// 	}
// }
// func main(){
// 	a:=10
// 	b:=3.14
// 	c:="hello string"
// 	d:=true
// 	reflectValue(a)
// 	reflectValue(b)
// 	reflectValue(c)
// 	reflectValue(d)
// }

//通过反射修改变量的值
package main
import(
	"fmt"
	"reflect"
)
func reflectSetValue(x interface{}){
	v:=reflect.ValueOf(x)
	if v.Elem().Kind()==reflect.Int{
		v.Elem().SetInt(200)
	}else if v.Elem().Kind()==reflect.String{
		v.Elem().SetString("cquptyyy")
	}
}
func main(){
	var x int=100
	reflectSetValue(&x)
	fmt.Println(x)
	str:="hello world"
	reflectSetValue(&str)
	fmt.Println(str)
}